/*
 * @lc app=leetcode.cn id=82 lang=java
 *
 * [82] 删除排序链表中的重复元素 II
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    //递归，参考评论一老哥的，写的确实好。
    // 如果不写递归的话要考虑的情况就很麻烦了，而且估计需要用三指针
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        //如果是这种情况
        //      1 --> 1 --> 1 --> 2 --> 3
        //     head  next
        //1.则需要移动next直到出现与当前head.value不相等的情况（含null）
        //2.并且此时的head已经不能要了，因为已经head是重复的节点
        //--------------else-------------
        //      1 --> 2 --> 3
        //     head  next
        //3.如果没有出现1的情况，则递归返回的节点就作为head的子节点
        ListNode next = head.next;

        if(head.val == next.val){
            //1
            while(next!=null && head.val == next.val){
                next = next.next;
            }
            //2. head不能要了，head要变成此时的next的递归，从而和上一个节点连接上
            head = deleteDuplicates(next);
        }else{
            //3. 
            head.next = deleteDuplicates(next);//next继续递归
        }
        return head;
        
    }
}
// @lc code=end

